﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TOAcademias;

namespace DAOAcademias
{

    /*************************************
    Autor: Carlos Sánchez
    Fecha de Creación: 06/02/2011
    Descripción de la Funcionalidad: Clase que contiene metodos que serviran para dar
    soporte a los registros de la entidad Matricula.
    **************************************/

    public class DOMatricula
    {

         DBModuloAcademiasDataContext dbml;

         public DOMatricula()
        {
            dbml = new DBModuloAcademiasDataContext();
        }

        public List<TOMatricula> obtenerMatriculas()
        {

            List<TOMatricula> listaMatriculas = new List<TOMatricula>();

            var matriculas = (from mat in dbml.MATRICULAs
                           select mat
                             ) ;

            foreach (var matricula in matriculas) {

                TOMatricula toMatricula = new TOMatricula();
                toMatricula.CodigoMatricula = matricula.COD_MATRICULA;
                toMatricula.CodigoPeriodo = matricula.COD_PERIODO;
                toMatricula.CodigoSocio=matricula.COD_SOCIO;
                toMatricula.Monto = matricula.MON_PAGO;

                listaMatriculas.Add(toMatricula);
            
            }
            
            return listaMatriculas;
        }


        public List<TOMatricula> obtenerMatriculasxPeriodo(String CodigoPeriodo)
        {

            List<TOMatricula> listaMatriculas = new List<TOMatricula>();

            var matriculas = (from mat in dbml.MATRICULAs
                              where mat.COD_PERIODO == CodigoPeriodo
                            select mat
                             );
          
             foreach (var matricula in matriculas) {

                TOMatricula toMatricula = new TOMatricula();
                toMatricula.CodigoMatricula = matricula.COD_MATRICULA;
                toMatricula.CodigoPeriodo = matricula.COD_PERIODO;
                toMatricula.CodigoSocio=matricula.COD_SOCIO;
                toMatricula.Monto = matricula.MON_PAGO;

                listaMatriculas.Add(toMatricula);
            
            }

            return listaMatriculas;
        }

        public TOMatricula obtenerMatriculaxSocio(String CodigoSocio)
        {

            try
            {
                var matricula = (from mat in dbml.MATRICULAs
                                 join pe in dbml.PERIODOs
                                 on mat.COD_PERIODO equals pe.COD_PERIODO
                                 join soc in dbml.SOCIOs
                                 on mat.COD_SOCIO equals soc.COD_SOCIO
                                 where pe.ESTADO == "ACTIVO" && mat.COD_SOCIO == CodigoSocio
                                 select new { mat.COD_MATRICULA, mat.COD_PERIODO, mat.COD_SOCIO, mat.MON_PAGO, soc.NOM_SOCIO }
                                 ).Single();


                TOMatricula toMatricula = new TOMatricula();
                toMatricula.CodigoMatricula = matricula.COD_MATRICULA;
                toMatricula.CodigoPeriodo = matricula.COD_PERIODO;
                toMatricula.CodigoSocio = matricula.COD_SOCIO;
                toMatricula.Monto = matricula.MON_PAGO;
                toMatricula.Socio = matricula.NOM_SOCIO;

                return toMatricula;
            }
            catch (Exception ex) {
                Console.Write(ex.Message.ToString()); 
                return null;
            }
            
        }

        public List<TOMatriculaSeccion> obtenerMatriculaSeccionxSocio(String CodigoSocio)
        {
            List<TOMatriculaSeccion> listaMatriculas = new List<TOMatriculaSeccion>();

            var matriculas = (from matsec in dbml.MATRICULA_SECCIONs
                             join mat in dbml.MATRICULAs
                             on matsec.COD_MATRICULA equals mat.COD_MATRICULA
                             join sec in dbml.SECCIONs
                             on matsec.COD_SECCION equals sec.COD_SECCION
                             join ins in dbml.INSTRUCTORs
                             on sec.COD_INSTRUCTOR equals ins.COD_INSTRUCTOR
                             where mat.COD_SOCIO == CodigoSocio
                             select new {matsec.COD_MATRICULA, matsec.COD_SECCION,matsec.FEC_MS,ins.COD_INSTRUCTOR,ins.APE_PAT_INSTRUCTOR,ins.APE_MAT_INSTRUCTOR,mat.MON_PAGO}
                             );

            foreach (var matricula in matriculas)
            {

                TOMatriculaSeccion toMatriculaSeccion = new TOMatriculaSeccion();
                toMatriculaSeccion.CodigoMatricula = matricula.COD_MATRICULA;
                toMatriculaSeccion.CodigoSeccion = matricula.COD_SECCION;
                toMatriculaSeccion.Fecha = matricula.FEC_MS;

                listaMatriculas.Add(toMatriculaSeccion);

            }

            return listaMatriculas;
        }


        public void insertarMatricula(TOMatricula toMatricula)
        {
            List<TOMatricula> listaMatriculas= obtenerMatriculas();

            int intAux = 0;
            int intTemp=0;
            foreach (TOMatricula matricula in listaMatriculas)
            {
                intTemp=Convert.ToInt32(matricula.CodigoMatricula.Substring(2));
                if (intTemp > intAux) {

                    intAux = intTemp;
                }
            }

            intAux = intAux + 1;
            string strCodigo = ""+intAux;
            strCodigo = "MA000".Substring(0, 5 - strCodigo.Length)+intAux;

            MATRICULA mat = new MATRICULA();
            mat.COD_MATRICULA=strCodigo;
            mat.COD_PERIODO=toMatricula.CodigoPeriodo;
            mat.COD_SOCIO=toMatricula.CodigoSocio;
            mat.MON_PAGO=toMatricula.Monto;

            dbml.MATRICULAs.InsertOnSubmit(mat);
            dbml.SubmitChanges();

        }

        public void modificarMatricula(TOMatricula toMatricula)
        {
            var matricula = (from mat in dbml.MATRICULAs
                            where mat.COD_MATRICULA == toMatricula.CodigoMatricula
                            select mat).Single();

            matricula.COD_PERIODO = toMatricula.CodigoPeriodo;
            matricula.COD_SOCIO = toMatricula.CodigoSocio;
            matricula.MON_PAGO = toMatricula.Monto;

            dbml.SubmitChanges();

        }

      


    }
}
